package did

type MyNode struct {
	dc int64//中心编号
	epoch int64//时间起始点
	node *Node//节点
}
/**
输入参数，dc:数据中心编号，0-1023，
起始时间点：epoch :1577905445000
 */
func NewMyNode(dc,epoch int64) *MyNode {
	InnerSetEpoc(epoch)
	var err error
	node, err = NewNode(dc)
	if err != nil {
		return nil
	}
	return &MyNode{dc: dc,epoch: epoch,node: node}
}

func (n *MyNode)Next() int64  {
	return  n.node.Generate().Int64()
}

func GetMyDefaultEpoch() int64 {
	//str:="2020-01-02 03:04:05"
	//Epoch int64 = 1577905445000
	return 1577905445000
}







var (
	node *Node
)
/**
使用方法
1.先初始化，输入下一个0-1023的数据中心
2.得到一个id
3.可能用到从id得到dc,tm,ts,seq,反推时不用初始化
 */
func InitDateCenter(dc int64) {
	var err error
	node, err = NewNode(dc)
	if err != nil {
		return
	}
}

func SetEpoch(epoch int64)  {

	InnerSetEpoc(epoch)
}


func Dc(id int64) int64  {
	return ID(id).Node()
}
//毫秒
func GenTime(id int64) int64 {
	return  ID(id).Time()
}
func Seq(id int64) int64  {
	return ID(id).Step()
}

/**
从一个64位id得到生成的
dc数据中心
ts utc秒
tm 毫秒
seq 这个毫秒内的序列
不同的epoch,1577905445000会有不同的ts
 */
func GetIdInfo(id int64) (dc,ts,tm,seq int64)  {
	myId:=ID(id)
	dc=myId.Node()
	ts=myId.Time()/1000
	tm=myId.Time()%1000
	seq=myId.Step()
	return

}
